﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Monitor.Models.Interfaces
{
    /// <summary>
    /// Интерфей работы с кэшем
    /// </summary>
    public interface ICacheClient
    {
        //инициализация клиента - равносильно очистке кэша
        /// <summary>
        /// Инициализация
        /// </summary>
        void Initialize();
        /// <summary>
        /// Добавить в Кэш одного элемента
        /// </summary>
        /// <typeparam name="T">объект какого типа кэшируется</typeparam>
        /// <param name="id">индификатор в кэше</param>
        /// <param name="obj">сам объект</param>
        void Add<T>(string id,T obj);
        /// <summary>
        /// Добавление в кэш массива элементов
        /// </summary>
        /// <typeparam name="T">массив каких элементов будет кэшироваться</typeparam>
        /// <param name="proptertyKey">индификатор в кэше</param>
        /// <param name="obj">перечесление объектов</param>
        void Add<T>(string proptertyKey, IEnumerable<T> obj);
        /// <summary>
        /// Извлечение элемента из кэша
        /// </summary>
        /// <typeparam name="T">тип объекта</typeparam>
        /// <param name="key">ключ</param>
        /// <returns>объект из кэша</returns>
        T GetById<T>(string key);
        /// <summary>
        /// Извлечение массива объектов из кэша
        /// </summary>
        /// <typeparam name="T">тип извлекаемого элемента массива объектов</typeparam>
        /// <param name="keys">массив ключей</param>
        /// <returns>возвращаем список объектов</returns>
        List<T> GetByIds<T>(IEnumerable<string> keys);
    }
}
